package offer2

/*
原题链接:
https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/

剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
返回删除后的链表的头节点。
注意：此题对比原题有改*

示例1:
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
*/
func deleteNode(head *ListNode, val int) *ListNode {

	//1.特殊判断 如果头节点就是目标值,直接返回head.Next
	if head.Val == val {
		return head.Next
	}

	//2.声明pre, curr指针
	var pre = head
	var curr = head.Next

	//3.只要 curr != nil && curr的值和目标值不等, 就一起向后移动
	for curr != nil && curr.Val != val {
		pre = pre.Next
		curr = curr.Next
	}

	//4.停止移动了, 判断当前节点是否不为空,进行指针替换
	if curr != nil {
		pre.Next = curr.Next
	}

	//5.返回头结点
	return head
}
